/**
 * @作者 伟子涵
 * @微信公号 搬砖暗夜码农
 * @开源项目 $ https://gitee.com/zhouwei5208888
 * @我的博客 $ http://itzhouwei.com
 * @创建时间 2023/12/18  14:40
 */
package com.itzhouwei.commerce.thread.core.demo8;

import java.util.concurrent.Semaphore;

/**
 * @description: <h1>使用Semaphore是一种计数信号量，用于管理一组许可证。在这个问题中，我们可以使用两个信号量，
 * 一个用于控制打印1的线程，另一个用于控制打印2的线程。</h1>
 * @author：zw，微信：yingshengzw
 * @date: 2023/12/18  14:40 
 * @Copyright： 公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、分享、成长，让自己和他人都能有所收获！
 */
public    class  PrintNumbers {

    private final  Semaphore semaphore = new Semaphore(1);
    private final  Semaphore semaphore2 = new Semaphore(0);

    public void startPrinting() {
        new Thread(new PrintOne()).start();
        new Thread(new PrintTwo()).start();
    }

    class  PrintOne implements Runnable{

        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                try {
                    semaphore.acquire();
                    System.out.print("1");
                    Thread.sleep(1000);
                    semaphore2.release();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    class  PrintTwo implements Runnable{

        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                try {
                    semaphore2.acquire();
                    System.out.print("2");
                    Thread.sleep(1000);
                    semaphore.release();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
